package com.xiaol.springbootredis.common.page;

import lombok.Data;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * User: chenshun131 <p />
 * Time: 18/6/6 16:13  <p />
 * Version: V1.0  <p />
 * Description: 分页组件 <p />
 */
@Data
public class PageBean implements Serializable {

    private static final long serialVersionUID = 8470697978259453214L;

    /** 当前页 */
    private int currentPage;

    /** 每页显示多少条 */
    private int pageSize = 10;

    /** 总记录数 */
    private int totalNum;

    /** 本页的数据列表 */
    private List<Object> recordList;

    /** 总页数 */
    private int pageCount;

    /** 页码列表的开始索引（包含） */
    private int beginPageIndex;

    /** 页码列表的结束索引（包含） */
    private int endPageIndex;

    /** 当前分页条件下的统计结果 */
    private Map<String, Object> countResultMap;

    public PageBean() {
    }

    /**
     * 只接受前4个必要的属性，会自动的计算出其他3个属生的值
     *
     * @param currentPage
     * @param pageSize
     * @param totalNum
     * @param recordList
     */
    public PageBean(int currentPage, int pageSize, int totalNum, List<Object> recordList) {
        this.currentPage = currentPage;
        this.pageSize = pageSize;
        this.totalNum = totalNum;
        this.recordList = recordList;

        // 计算总页码
        pageCount = (totalNum + pageSize - 1) / pageSize;

        // 计算 beginPageIndex 和 endPageIndex
        // >> 总页数不多于10页，则全部显示
        if (pageCount <= 10) {
            beginPageIndex = 1;
            endPageIndex = pageCount;
        }
        // >> 总页数多于10页，则显示当前页附近的共10个页码
        else {
            // 当前页附近的共10个页码（前4个 + 当前页 + 后5个）
            beginPageIndex = currentPage - 4;
            endPageIndex = currentPage + 5;
            // 当前面的页码不足4个时，则显示前10个页码
            if (beginPageIndex < 1) {
                beginPageIndex = 1;
                endPageIndex = 10;
            }
            // 当后面的页码不足5个时，则显示后10个页码
            if (endPageIndex > pageCount) {
                endPageIndex = pageCount;
                beginPageIndex = pageCount - 10 + 1;
            }
        }
    }

    /**
     * 只接受前5个必要的属性，会自动的计算出其他3个属生的值
     *
     * @param currentPage
     * @param pageSize
     * @param totalNum
     * @param recordList
     */
    public PageBean(int currentPage, int pageSize, int totalNum, List<Object> recordList, Map<String, Object> countResultMap) {
        this.currentPage = currentPage;
        this.pageSize = pageSize;
        this.totalNum = totalNum;
        this.recordList = recordList;
        this.countResultMap = countResultMap;

        // 计算总页码
        pageCount = (totalNum + pageSize - 1) / pageSize;

        // 计算 beginPageIndex 和 endPageIndex
        // >> 总页数不多于10页，则全部显示
        if (pageCount <= 10) {
            beginPageIndex = 1;
            endPageIndex = pageCount;
        }
        // >> 总页数多于10页，则显示当前页附近的共10个页码
        else {
            // 当前页附近的共10个页码（前4个 + 当前页 + 后5个）
            beginPageIndex = currentPage - 4;
            endPageIndex = currentPage + 5;
            // 当前面的页码不足4个时，则显示前10个页码
            if (beginPageIndex < 1) {
                beginPageIndex = 1;
                endPageIndex = 10;
            }
            // 当后面的页码不足5个时，则显示后10个页码
            if (endPageIndex > pageCount) {
                endPageIndex = pageCount;
                beginPageIndex = pageCount - 10 + 1;
            }
        }
    }

}
